package factories;

import service.UserService;
import service.impl.UserServiceImpl1;

import java.io.IOException;
import java.util.Properties;

public class BeanFactory {

    public static<T> T getBean(Class<T> cls) throws InstantiationException, IllegalAccessException {
        return cls.newInstance();
    }


    public static Object getBean(String id){

        try {
            Properties properties = new Properties();
            properties.load(BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties"));

            String className = properties.getProperty(id);

            //在不知道业务对象内部具体实现的情况下，要对业务对象内部某些方法【find相关的】进行功能增强【缓存处理】
            /**
             *  ①  装饰者设计模式
             *      BufferedRead BufferedXxxx   -- 装饰者设计模式
             *  ② 代理设计模式
             *      静态代理
             *      *** 动态代理
             *          JDK代理 - 只能基于接口实现动态代理
             *          CGLIB代理 - 不局限于接口
             */

            return Class.forName(className).newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }
}
